﻿#define _CRT_SECURE_NO_WARNINGS 1
#include "BSTree.h"
int main()
{
	////测试样例一: 一般情况下
	//int a[] = { 8, 3, 1, 10, 6, 4, 7, 14, 13 };
	//bite::BSTree<int> b;
	//for (int i = 0; i < sizeof(a) / sizeof(int); i++) {
	//	b.Insert(a[i]);
	//}
	////输出制作的二叉搜索树
	//cout << "二叉搜索树: ";
	//b.Inorder();
	//// 删除头节点的情况
	//b.Erase(1);
	//cout << "删除头节点: ";
	//b.Inorder();
	////删除中间节点时的情况
	//b.Erase(10);
	//cout << "删除中间节点: ";
	//b.Inorder();
	////删除尾节点时的情况
	//b.Erase(14);
	//cout << "删除尾节点: ";
	//b.Inorder();

	////测试样例二: 根节点没有左子树时的情况
	//int m[] = { 8, 10, 14, 13 };
	//bite::BSTree<int> n;
	//for (int i = 0; i < sizeof(m) / sizeof(int); i++) {
	//	n.Insert(m[i]);
	//}
	////输出制作的二叉搜索树
	//cout << "二叉搜索树: ";
	//n.Inorder();
	////删除头节点时的情况
	//n.Erase(8);
	//cout << "删除头节点: ";
	//n.Inorder();

	////测试样例三: 根节点没有右子树时的情况
	//int v[] = { 8,3,1,6,4,7 };
	//bite::BSTree<int> B;
	//for (int i = 0; i < sizeof(v) / sizeof(int); i++) {
	//	B.Insert(v[i]);
	//}
	////输出制作的二叉搜索树
	//cout << "二叉搜索树: ";
	//B.Inorder();
	////删除头节点时的情况
	//B.Erase(1);
	//cout << "删除头节点: ";
	//B.Inorder();


	////递归使用的调用样例
	//int a[] = { 8, 3, 1, 10, 6, 4, 7, 14, 13 };
	//bite::BSTree<int> b;
	//for (int i = 0; i < sizeof(a) / sizeof(int); i++) {
	//	b.InsertB(a[i]);
	//}
	////输出制作的搜索二叉树
	//cout << "搜索二叉树: ";
	//b.Inorder();
	////查找
	//cout << b.FindB(8) << "  " << b.FindB(13) << "  " << b.FindB(11) << endl;
	////删除有左右子树的节点
	//b.EraseB(3);
	//b.Inorder();
	////删除左子树为空的节点
	//b.EraseB(10);
	//b.Inorder();
	////删除右子树为空的节点
	//b.EraseB(14);
	//b.Inorder();


	////赋值，拷贝构造测试样例
	//int a[] = { 8, 3, 1, 10, 6, 4, 7, 14, 13 };
	//bite::BSTree<int> b;
	//for (int i = 0; i < sizeof(a) / sizeof(int); i++) {
	//	b.InsertB(a[i]);
	//}
	//cout << "原: ";
	//b.Inorder();

	//cout << "拷贝构造后的数据结构: ";
	//bite::BSTree<int> b1(b);
	//b1.Inorder();

	//b.Erase(3);
	//b.EraseB(10);
	//cout << "原删除: ";
	//b.Inorder();

	//cout << "拷贝构造后的数据结构的删除: ";
	//b1.Erase(1);
	//b1.EraseB(7);
	//b1.Inorder();

	//b1 = b;
	//b1.Inorder();

	
	return 0;
}

